package hamaster.jpbc.gui;

import static java.awt.FlowLayout.LEFT;
import static javax.swing.JFileChooser.APPROVE_OPTION;

import java.awt.Component;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;

import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.filechooser.FileFilter;

/**
 * 浏览并选择文件的控件
 * @author <a href="mailto:wangyeee@gmail.com">Wang Ye</a>
 */
public class ChooseFilePanel extends JPanel implements ActionListener {
	private static final long serialVersionUID = 1L;

	private JFileChooser plainFileChooser;
	private JTextField filePath;
	private JButton browser;

	/**
	 * 创建一个新的控件
	 * @param label 显示标签
	 */
	public ChooseFilePanel(String label) {
		super(new FlowLayout(LEFT));
		plainFileChooser = new JFileChooser((String) null);
		browser = new JButton(Messages.getString("ChooseFilePanel.0")); //$NON-NLS-1$
		filePath = new JTextField(15);
		browser.addActionListener(this);
		filePath.setEditable(false);

		add(new JLabel(label));
		add(filePath);
		add(Box.createHorizontalStrut(5));
		add(browser);
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		final Component parent = this;
		if (e.getSource() == this.browser) {
			Thread chooseFile = new Thread() {
				@Override
				public void run() {
					int result = plainFileChooser.showOpenDialog(parent);
					if (result == APPROVE_OPTION) {
						String path = plainFileChooser.getSelectedFile().getPath();
						filePath.setText(path);
					}
				}
			};
			chooseFile.start();
		}
	}

	/**
	 * 设置文件过滤器 过滤符合要求的文件类型
	 * @param filter 要设置的文件过滤器
	 */
	public void setFileFilter(FileFilter filter) {
		plainFileChooser.setFileFilter(filter);
	}

	/**
	 * 设置默认的文件名
	 * @param fileName 默认文件名
	 */
	public void setDefaultFileName(String fileName) {
		plainFileChooser.setSelectedFile(new File(fileName));
	}
	
	/**
	 * 设置默认目录
	 * @param dir 要设置的目录
	 */
	public void setCurrentDirectory(File dir) {
		plainFileChooser.setCurrentDirectory(dir);
	}

	/**
	 * 设置模式 默认选择文件和文件夹
	 * @param mode 新的模式
	 */
	public void setFileSelectionMode(int mode) {
		plainFileChooser.setFileSelectionMode(mode);
	}

	/**
	 * @return 被选的文件/文件夹绝对路径
	 */
	public String getSelectedFilePath() {
		return filePath.getText();
	}

	public void enableChooseFile() {
		browser.setEnabled(true);
	}

	public void disableChooseFile() {
		browser.setEnabled(false);
	}

}
